﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Neturion.Servicos;

namespace Neturion.WebFluorine
{
    public partial class Boleto : Page
    {
        private Servicos.ServicoUtil _servicoUtil;
        private Servicos.ServicoTitulo _servicoTitulo;
        private Servicos.ServicoMovimentoFinanceiro _servicoMovimentoFinanceiro;
        private Servicos.ServicoPessoa _servicoPessoa;
        private Servicos.ServicoContaBanco _servicoContaBanco;
        private Servicos.ServicoFormaPagamento _servicoFormaPagamento;

        protected void Page_Load(object sender, EventArgs e)
        {

            try
            {
                if (!IsPostBack)
                {
                    //Verificando se possui Titulo ou Movimentação Financeira
                    if (string.IsNullOrEmpty(Request.QueryString["t"]) && string.IsNullOrEmpty(Request.QueryString["m"]))
                    {
                        throw new Exception("dkjfhdk");
                    }

                    if(string.IsNullOrEmpty(Request.QueryString["s"]))
                    {
                        throw new Exception("dkjfh");
                    }

                    if (string.IsNullOrEmpty(Request.QueryString["c"]))
                    {
                        throw new Exception("dkjfh");
                    }

                    if (string.IsNullOrEmpty(Request.QueryString["f"]))
                    {
                        throw new Exception("dkjfh");
                    }

                    _servicoMovimentoFinanceiro = new ServicoMovimentoFinanceiro();
                    Dados.MovimentoFinanceiro movimentoFinanceiro = null;
                    if(!string.IsNullOrEmpty(Request.QueryString["m"]))
                    {
                        long idMovimentoFinanceiro = Convert.ToInt64(Request.QueryString["m"]);
                        movimentoFinanceiro = _servicoMovimentoFinanceiro.ObterMovimentoFinanceiroPorId(idMovimentoFinanceiro, null);
                    }

                    _servicoTitulo = new ServicoTitulo();
                    Dados.Titulo titulo = null;
                    if(!string.IsNullOrEmpty(Request.QueryString["t"]))
                    {
                        long idTitulo = Convert.ToInt64(Request.QueryString["t"]);
                        titulo = _servicoTitulo.ObterTituloPorId(idTitulo);
                    }

                    _servicoPessoa = new ServicoPessoa();
                    int idPessoa = Convert.ToInt32(Request.QueryString["s"]);
                    Dados.Pessoa pessoaSacado = _servicoPessoa.ObterPessoaPorId(idPessoa, null);
                    
                    _servicoContaBanco = new ServicoContaBanco();
                    int idContaBanco = Convert.ToInt32(Request.QueryString["c"]);
                    Dados.ContaBanco contaBanco = _servicoContaBanco.ObterContaBancoPorId(idContaBanco, null);

                    _servicoFormaPagamento = new ServicoFormaPagamento();
                    int idFormaPagamento = Convert.ToInt32(Request.QueryString["f"]);
                    Dados.FormaPagamento formaPagamento = _servicoFormaPagamento.ObterFormaPagamentoPorId(idFormaPagamento, null);

                    if((titulo == null && movimentoFinanceiro == null) || pessoaSacado == null || contaBanco == null || formaPagamento == null)
                    {
                        throw new Exception("Não foi possível gerar o boleto!");
                    }

                    string caminhoArquivo = _servicoTitulo.GeracaoBoleto(titulo, pessoaSacado, contaBanco, formaPagamento, null);
                    
                    Response.WriteFile(caminhoArquivo);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}